/**
 * 调用通义千问VL模型进行图像识别的函数
 * @param {string} imageUrl - 要识别的图片URL
 * @param {string} question - 关于图片的问题或指令
 * @param {Object} [options] - 可选参数
 * @param {string} [options.model="qwen-vl-max"] - 使用的模型名称
 * @param {string} [options.apiKey] - API密钥，默认为环境变量中的DASHSCOPE_API_KEY
 * @returns {Promise<Object>} - 返回API的响应结果
 */
async function queryQwenVL(imageUrl, question, options = {}) {
  const {
      model = "qwen-vl-max",
      apiKey = process.env.DASHSCOPE_API_KEY || 'sk-52eb06af52a24168aa5791c0e25ab522'
  } = options;

  const BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';

  const data = {
      model: model,
      messages: [
          {
              role: "user",
              content: [
                  { type: "image_url", image_url: { url: imageUrl } },
                  { type: "text", text: question }
              ]
          }
      ]
  };

  try {
      const response = await fetch(BASE_URL + '/chat/completions', {
          method: 'POST',
          headers: {
              'Authorization': `Bearer ${apiKey}`,
              'Content-Type': 'application/json'
          },
          body: JSON.stringify(data)
      });

      if (!response.ok) {
          const errorData = await response.json().catch(() => ({}));
          throw new Error(`HTTP error! status: ${response.status}, message: ${response.statusText}, details: ${JSON.stringify(errorData)}`);
      }

      return await response.json();
  } catch (error) {
      console.error('Error in queryQwenVL:', error);
      throw error; // 重新抛出错误以便调用者处理
  }
}

// 使用示例
async function main() {
  try {
      const result = await queryQwenVL(
          "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg",
          "这是什么？",
          {
              // 可以在这里覆盖默认参数
              // model: "qwen-vl-plus",
              // apiKey: "your-custom-api-key"
          }
      );
      console.log(JSON.stringify(result, null, 2));
  } catch (error) {
      console.error('Failed to query Qwen VL:', error);
  }
}

// 导出函数以便其他模块使用
export { queryQwenVL };

// 调用示例
main();